﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ProjControleBLL;
using ProjControleModelos;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using ProjControle.Relatórios;
namespace ProjControle
{
    public partial class frm_cadastra_compra : Form
    {
        public frm_cadastra_compra()
        {
            InitializeComponent();
        }
        DataTable tab;
        DataTable tab2;
        String controle;
        Double valor;

        #region Métodos
        public void carregaCampos(Compra objC)
        {
            try
            {
                int cod_fornecedor = objC.cod_fornecedor;
                tbCodCompra.Text = objC.cod_compra.ToString();
                tbCodFornecedor.Text = objC.cod_fornecedor.ToString();
                dtCompra.Value = objC.dt_compra;
                lValProdutos.Text = objC.val_compra.ToString("C2");
                if (objC.val_frete.HasValue)
                    tbValFrete.Text = objC.val_frete.ToString();
                else
                    tbValFrete.Text = "";
                if (objC.num_nota_fiscal.HasValue)
                    tbNumNota.Text = objC.num_nota_fiscal.ToString();
                else
                    tbNumNota.Text = "";
                Fornecedores objF = new Fornecedores();
                FornecedoresBLL objForn = new FornecedoresBLL();
                objF = objForn.localizar(cod_fornecedor);
                if (objF.codigo != 0)
                    lNomeFornecedor.Text = objF.descricao;
                DataRow linha;
                foreach (Itens_Compra objIC in objC.lProdutos)
                {
                    linha = tab.NewRow();
                    linha["cod_produto"] = objIC.cod_produto;
                    Produtos objProd = new Produtos();
                    ProdutosBLL objProdBLL = new ProdutosBLL();
                    objProd = objProdBLL.localizar(objIC.cod_produto);
                    if (objProd.cod_produto != 0)
                        linha["descricao_produto"] = objProd.descricao_produto;
                    linha["val_produto"] = objIC.val_unitario;
                    linha["qntd_produto"] = objIC.qtd_item;
                    linha["total_produto"] = objIC.val_total_item;
                    tab.Rows.Add(linha);
                    tab.AcceptChanges();
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        public double calcularValNota()
        {
            double val = 0,val_frete = 0;
            //double valor;
            try
            {
                if (tbValFrete.Text != "")
                    val_frete = double.Parse(tbValFrete.Text);
                else
                    val_frete = 0;
                foreach (DataRow linha in tab.Rows)
                {

                    val += Double.Parse(linha["total_produto"].ToString().Replace("R$", ""));
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return val;
        }
        public double calculaProdutos()
        {
            double val = 0;
            //double valor;
            try
            {
                foreach (DataRow linha in tab.Rows)
                {

                    val += Double.Parse(linha["total_produto"].ToString().Replace("R$", ""));
                    valor = val;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return val;
        }
        public Compra carregaPropriedades()
        {
            Compra objC = new Compra();
            try
            {
                if (tbCodCompra.Text == "")
                    objC.cod_compra = 0;
                else
                    objC.cod_compra = int.Parse(tbCodCompra.Text);
                objC.cod_fornecedor = int.Parse(tbCodFornecedor.Text);
                objC.dt_compra = dtCompra.Value;
                if (tbNumNota.Text == "")
                    objC.num_nota_fiscal = null;
                else
                    objC.num_nota_fiscal = int.Parse(tbNumNota.Text);
                objC.val_compra = valor;
                if (tbValFrete.Text == "")
                    objC.val_frete = null;
                else
                    objC.val_frete = double.Parse(tbValFrete.Text);
                objC.lProdutos.Clear();
                Itens_Compra objIC;
                foreach (DataRow linha in tab.Rows)
                {
                    objIC = new Itens_Compra();
                    objIC.cod_produto = int.Parse(linha["cod_produto"].ToString());
                    objIC.qtd_item = int.Parse(linha["qntd_produto"].ToString());
                    objIC.val_unitario = double.Parse(linha["val_produto"].ToString());
                    objIC.val_total_item = double.Parse(linha["total_produto"].ToString());
                    objC.lProdutos.Add(objIC);
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            return objC;
        }
        public void alterar()
        {
            controle = "A";
            gbDadosNota.Enabled = true;
            bIncluir.Enabled = false;
            bAlterar.Enabled = false;
            bExcluir.Enabled = false;
            bCancelar.Enabled = true;
            bSalvar.Enabled = true;
            bVoltar.Enabled = false;
            bImprimir.Enabled = false;
            bIncluirProd.Enabled = true;
            
        }
        public void inserir()
        {
            controle = "I";
            bIncluir.Enabled = false;
            bAlterar.Enabled = false;
            bExcluir.Enabled = false;
            bCancelar.Enabled = true;
            bIncluirProd.Enabled = true;
            bSalvar.Enabled = true;
            bVoltar.Enabled = false;
            bImprimir.Enabled = false;
            gbDadosNota.Enabled = true;
        }
        public void inserirProduto()
        {
            bIncluirProd.Enabled = false;
            bCancelarProd.Enabled = true;
            tbCodProd.Enabled = true;
            bProdutos.Enabled = true;
            tbQntdProd.Enabled = true;
            tbValUnitProd.Enabled = true;
            tbDesconto.Enabled = true;
            tbDespesas.Enabled = true;
            bSalvarProd.Enabled = true;
            dgProdCompra.Enabled = true;
        }
        public void associaGrid()
        {
            try
            {
                tab = new DataTable();
                tab.Columns.Add("cod_produto");
                tab.Columns.Add("descricao_produto");
                tab.Columns.Add("qntd_produto");
                tab.Columns.Add("val_produto");
                tab.Columns.Add("total_produto");
                dgProdCompra.DataSource = tab;
                dgProdCompra.AllowUserToResizeColumns = false;
                dgProdCompra.AllowUserToResizeRows = false;
                dgProdCompra.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgProdCompra.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgProdCompra.AllowUserToAddRows = false;
                dgProdCompra.Columns["cod_produto"].HeaderText = "Código";
                dgProdCompra.Columns["cod_produto"].Width = 70;
                dgProdCompra.Columns["descricao_produto"].HeaderText = "Descrição";
                dgProdCompra.Columns["descricao_produto"].Width = 300;
                dgProdCompra.Columns["qntd_produto"].HeaderText = "Qntd";
                dgProdCompra.Columns["qntd_produto"].Width = 70;
                dgProdCompra.Columns["val_produto"].HeaderText = "Valor Unitário";
                dgProdCompra.Columns["val_produto"].Width = 120;
                dgProdCompra.Columns["total_produto"].HeaderText = "Valor Total";
                dgProdCompra.Columns["total_produto"].Width = 100;
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        public void associaGridConsulta()
        {
            try
            {
            tab2 = new DataTable();
            tab2.Columns.Add("cod_compra");
            tab2.Columns.Add("descricao_fornecedor");
            tab2.Columns.Add("valor_compra");
            tab2.Columns.Add("data_compra");
            dgConsulta.DataSource = tab2;
            dgConsulta.AllowUserToResizeColumns = false;
            dgConsulta.AllowUserToResizeRows = false;
            dgConsulta.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgConsulta.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgConsulta.AllowUserToAddRows = false;
            dgConsulta.Columns["cod_compra"].HeaderText = "Código";
            dgConsulta.Columns["cod_compra"].Width = 100;
            dgConsulta.Columns["descricao_fornecedor"].HeaderText = "Fornecedor";
            dgConsulta.Columns["descricao_fornecedor"].Width = 320;
            dgConsulta.Columns["valor_compra"].HeaderText = "Valor";
            dgConsulta.Columns["valor_compra"].Width = 120;
            dgConsulta.Columns["data_compra"].HeaderText = "Data";
            dgConsulta.Columns["data_compra"].Width = 120;
            //OrcamentoBLL objBLL = new OrcamentoBLL();
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        public void limpar()
        {
            //gbProdCompra.Enabled = false;
            tbCodCompra.Text = "";
            tbCodFornecedor.Text = "";
            tbNumNota.Text = "";
            tbCodProd.Text = "";
            tbValFrete.Text = "";
            tbQntdProd.Text = "";
            tbValUnitProd.Text = "";
            tbDesconto.Text = "";
            tbDespesas.Text = "";
            lNomeFornecedor.Text = "";
            lNomeProduto.Text = "";
            lValNota.Text = "";
            lValProdutos.Text = "";
            lValUltCompra.Text = "";
            dgProdCompra.DataSource = null;
            bIncluir.Enabled = true;
            bAlterar.Enabled = false;
            bExcluir.Enabled = false;
            bCancelar.Enabled = true;
            bImprimir.Enabled = false;
            bSalvar.Enabled = false;
            bVoltar.Enabled = true;
            gbDadosNota.Enabled = false;
            tbCodProd.Enabled = false;
            bProdutos.Enabled = false;
            tbQntdProd.Enabled = false;
            tbValUnitProd.Enabled = false;
            tbDesconto.Enabled = false;
            tbDespesas.Enabled = false;
            bAlterarProd.Enabled = false;
            bExcluirProd.Enabled = false;
            bCancelarProd.Enabled = false;
            bSalvarProd.Enabled = false;
            bIncluirProd.Enabled = false;
            bCancelar.Enabled = false;
            associaGrid();
            associaGridConsulta();
            dgProdCompra.Enabled = false;
            lValProdutos.Text = (0).ToString("C2");
            lValNota.Text = (0).ToString("C2");
        }
        public void cancelaProdutos()
        {
            tbCodProd.Enabled = false;
            bProdutos.Enabled = false;
            tbQntdProd.Enabled = false;
            tbValUnitProd.Enabled = false;
            tbDesconto.Enabled = false;
            tbDespesas.Enabled = false;
            bAlterarProd.Enabled = false;
            bExcluirProd.Enabled = false;
            bCancelarProd.Enabled = false;
            bSalvarProd.Enabled = false;
            bIncluirProd.Enabled = true;
            lNomeProduto.Text = "";
            tbCodProd.Text = "";
            tbQntdProd.Text = "";
            lValUltCompra.Text = "";
            tbValUnitProd.Text = "";
            tbDesconto.Text = "";
            tbDespesas.Text = "";
        }
        #endregion
        private void bVoltar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void frm_cadastra_compra_Load(object sender, EventArgs e)
        {
            limpar();
        }

        private void bIncluir_Click(object sender, EventArgs e)
        {
            inserir();
        }

        private void bAlterar_Click(object sender, EventArgs e)
        {
            alterar();
        }

        private void bExcluir_Click(object sender, EventArgs e)
        {
            CompraBLL objBLL = null;
            Compra objC = null;
            try
            {
                if (MessageBox.Show("Deseja Excluir?", "Mensagem", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                    objBLL = new CompraBLL();
                    objC = carregaPropriedades();
                    objBLL.excluir(objC);
                    MessageBox.Show("Excluido com Sucesso", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    limpar();
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            objBLL = null;
            objC = null;
        }

        private void bCancelar_Click(object sender, EventArgs e)
        {
            limpar();
        }

        private void bSalvar_Click(object sender, EventArgs e)
        {
            CompraBLL objBLL = null;
            Compra objC = null;
            Boolean ret;
            try
            {
                //ret = validaCampos();
                ret = true;
                if (ret == true)
                {
                    objC = carregaPropriedades();

                    objBLL = new CompraBLL();
                    if (controle == "I")
                        objBLL.inserir(objC);
                    else
                        objBLL.alterar(objC);

                    MessageBox.Show("Salvo com Sucesso!" + Environment.NewLine + "Código Registrado: " + objC.cod_compra + "", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    bCancelar_Click(sender, e);
                    if (MessageBox.Show("Deseja Imprimir Orçamento agora?", "Mensagem", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                    {
                        frm_relatorio frm = new frm_relatorio();
                        rpt_Orcamentos rpt = new rpt_Orcamentos();
                        //rpt.RecordSelectionFormula = "{venda.dt_venda}between" + dtInicial.Value + " and " + dtFinal.Value + "";
                        rpt.SetParameterValue(0, objC.cod_compra);
                        //rpt.SetParameterValue(1, dtFinal.Value);
                        frm.CR.ReportSource = rpt;
                        frm.Text = "Orçamento de Produtos";
                        frm.ShowDialog();
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            objBLL = null;
        }

        private void bIncluirProd_Click(object sender, EventArgs e)
        {
            inserirProduto();
        }

        private void bCancelarProd_Click(object sender, EventArgs e)
        {
            cancelaProdutos();
        }

        private void bProdutos_Click(object sender, EventArgs e)
        {
            ProdutosBLL objBLL = null;
            Produtos objP = null;
            try
            {
                frm_consulta frm = new frm_consulta();
                frm.Text = "Selecionar Produtos";
                frm.controle = "P";
                //frm.gbLocalizar.Visible = false;
                frm.ShowDialog();
                if (frm.codigo != 0)
                {
                    objBLL = new ProdutosBLL();
                    objP = objBLL.localizar(frm.codigo);
                    if (objP.cod_produto != 0)
                    {
                        tbCodProd.Text = objP.cod_produto.ToString();
                        lNomeProduto.Text = objP.descricao_produto;
                        lValUltCompra.Text = objP.preco_compra.ToString("C2");
                        tbQntdProd.Text = (1).ToString();
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void bSalvarProd_Click(object sender, EventArgs e)
        {
            try
            {
                if (tbQntdProd.Text == "" || tbValUnitProd.Text == "")
                    MessageBox.Show("Preencha o campo corretamente", "Mensagem");
                else
                {
                    DataRow linha;
                    double val;
                    val = int.Parse(tbQntdProd.Text) * double.Parse(tbValUnitProd.Text.Replace("R$", ""));
                    linha = tab.NewRow();
                    linha["cod_produto"] = tbCodProd.Text;
                    linha["descricao_produto"] = lNomeProduto.Text;
                    linha["qntd_produto"] = tbQntdProd.Text;
                    linha["val_produto"] = tbValUnitProd.Text;
                    linha["total_produto"] = val.ToString();
                    tab.Rows.Add(linha);
                    tab.AcceptChanges();
                    lNomeProduto.Text = "";
                    tbQntdProd.Text = "";
                    tbCodProd.Text = "";
                    tbValUnitProd.Text = "";
                    lValUltCompra.Text = "";
                    Double ret = calculaProdutos();
                    lValProdutos.Text = ret.ToString("C2");
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void bExcluirProd_Click(object sender, EventArgs e)
        {
            int i = 0;
            double ret = 0;
            i = 0;
            try
            {
                foreach (DataGridViewRow linha in dgProdCompra.SelectedRows)
                {
                    i = linha.Index;
                }
                if ((i >= 0))
                {
                    tab.Rows.RemoveAt(i);
                    tab.AcceptChanges();
                    ret = calculaProdutos();
                    lValProdutos.Text = ret.ToString("C2");
                    bAlterarProd.Enabled = false;
                    bExcluirProd.Enabled = false;
                    bSalvarProd.Enabled = true;
                    bIncluirProd.Enabled = true;
                    
                }
                else
                {
                    MessageBox.Show("Não existem itens para ser excluido!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Não existem itens para ser excluido!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dgProdCompra_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            bAlterarProd.Enabled = true;
            bExcluirProd.Enabled = true;
            bIncluirProd.Enabled = false;
            bSalvarProd.Enabled = false;
        }

        private void bAlterarProd_Click(object sender, EventArgs e)
        {
            int i = 0;
            //double ret = 0;
            i = 0;
            try
            {
                foreach (DataGridViewRow linha in dgProdCompra.SelectedRows)
                {
                    i = linha.Index;
                    DataRow linha1;
                    linha1 = tab.NewRow();

                }
                if ((i >= 0))
                {
                    
                    tab.Rows.RemoveAt(i);
                    tab.AcceptChanges();
                    //ret = calcula();
                    //tbValorTotal.Text = ret.ToString("C2");
                    //tbValNegociado.Text = ret.ToString("C2");
                }
                else
                {
                    MessageBox.Show("Não existem itens para ser alterado!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Não existem itens para ser alterado!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bFornecedores_Click(object sender, EventArgs e)
        {
            FornecedoresBLL objBLL = null;
            Fornecedores objFO = null;
            try
            {
                frm_consulta frm = new frm_consulta();
                frm.Text = "Selecionar Fornecedor";
                frm.controle = "FO";
                frm.gbLocalizar.Visible = false;
                //frm.gbLocalizar.Visible = false;
                frm.ShowDialog();
                if (frm.codigo != 0)
                {
                    objBLL = new FornecedoresBLL();
                    objFO = objBLL.localizar(frm.codigo);
                    if (objFO.codigo != 0)
                    {
                        tbCodFornecedor.Text = objFO.codigo.ToString();
                        lNomeFornecedor.Text = objFO.descricao;
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void tbLocalizar_KeyPress(object sender, KeyPressEventArgs e)
        {
            CompraBLL objBLL;
            if (e.KeyChar == Convert.ToChar(Keys.Space))
            {
                try
                {
                    DataTable tab;
                    objBLL = new CompraBLL();
                    tab = objBLL.localizar(tbLocalizar.Text.Trim());
                    if (tab.Rows.Count > 0)
                    {
                        dgConsulta.DataSource = tab;
                        for (int i = 4; i < dgConsulta.Columns.Count; i++)
                            dgConsulta.Columns[i].Visible = false;
                    }
                    else
                    {
                        MessageBox.Show("Registro(s) não Encontrado(s)!", "Compras", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        dgConsulta.DataSource = null;
                        associaGridConsulta();
                    }
                }
                catch (Exception ex)
                {

                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void bVisualizar_Click(object sender, EventArgs e)
        {
            try
            {
                int codigo = 0;
                CompraBLL objBLL = null;
                Compra objC = null;
                try
                {
                    
                    codigo = int.Parse(dgConsulta.Rows[0].Cells[0].Value.ToString());
                    if (codigo != 0)
                    {
                        bAlterar.Enabled = true;
                        bExcluir.Enabled = true;
                        bIncluir.Enabled = false;
                        bCancelar.Enabled = true;
                        bImprimir.Enabled = true;
                        objBLL = new CompraBLL();
                        objC = objBLL.localizar(codigo);
                        if (objC.cod_compra != 0)
                        {
                            dgConsulta.DataSource = tab2;
                            associaGrid();
                            carregaCampos(objC);
                            tabCompra.SelectedTab = tpCompras;
                        }
                    }
                }
                catch (Exception ex)
                {

                    MessageBox.Show(ex.Message);
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void tbValFrete_Leave(object sender, EventArgs e)
        {

        }

        private void dgConsulta_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                int codigo = 0;
                CompraBLL objBLL = null;
                Compra objC = null;
                try
                {
                    codigo = int.Parse(dgConsulta.Rows[e.RowIndex].Cells[0].Value.ToString());
                    if (codigo != 0)
                    {
                        bAlterar.Enabled = true;
                        bExcluir.Enabled = true;
                        bIncluir.Enabled = false;
                        bCancelar.Enabled = true;
                        bImprimir.Enabled = true;
                        objBLL = new CompraBLL();
                        objC = objBLL.localizar(codigo);
                        if (objC.cod_compra != 0)
                        {
                            dgConsulta.DataSource = tab2;
                            associaGrid();
                            carregaCampos(objC);
                            tabCompra.SelectedTab = tpCompras;
                        }
                    }
                }
                catch (Exception ex)
                {

                    MessageBox.Show(ex.Message);
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

    }
}
